Image editing applications provide various image editing effects to modify, enhance, adjust, and combine digital images. These effects are implemented and applied to an image using brushes, filters, or scripts of the image editing application. In many instances, the modifications are displayed in real time as each effect is applied to the image.
Image editing applications also permit users the ability to remove a previously applied effect, toggle on and off an effect, or modify a parameter of a previously applied effect. Such functionality is helpful as users often overlay multiple effects and the combination of effects sometimes produces an undesired result causing the user to remove, disable, or modify a previously applied effect. In such cases, the image editing application reproduces the image displayed on screen. The reproduced image renders the previous image with all the retained effects applied and the removed or disabled effect omitted or with the modified parameter of the adjusted effect applied. In this manner, users can step backwards through each of their previously applied effects correcting results of particular effects without having to manually re-specify each of the other effects they wish to retain.
To provide such functionality, prior art image editing applications track the effects as they are applied to the original image. In tracking the effects, some image editing application generate and store a different rendered frame after each effect is applied to the original image. Specifically, some prior art image editing applications keep a cache of every intermediate result in the effects pipeline in order to allow the ability to revert back to any such result. Such an approach consumes excessive amounts of memory and provides unacceptable performance when several effects are applied to an image.
Other image editing applications maintain an effects queue to record each specified effect and their associated parameters. In this manner, after a previously applied effect is removed, disabled, or modified, the original image is reprocessed with every function still within the effects queue to reproduce the image with the effect removed or modified. These image editing applications provide better memory savings at the cost of having to reprocess every effect in the effects queue each time a previously applied effect is removed or modified. For a sufficient number of effects, these image editing applications become processor constrained. Specifically, as image editing applications depend on both a generic central processing unit (i.e., CPU) and a graphics processor (GPU) to process the set of effects, the continual passing of data between the CPU and the GPU creates a bottleneck that greatly reduces the overall performance of the computer system while greatly increasing the time needed by the computer system to reprocess all the effects that have not been removed, disabled, or modified.
As a result, prior art image editing applications are only able to provide such undo, toggling, or modify functionality at the cost of excessive memory requirements or excessive processing requirements. Therefore, there is a need to provide such functionality in an image editing application in a manner that reduces the memory and processing requirements. Specifically, there is a need to provide such functionality such that processing or memory resources of a computer system are not overwhelmed when providing the undo or modify functionality.